package com.example.parent.bookmanage.controller;

import com.example.parent.bookmanage.entity.Book;
import com.example.parent.bookmanage.entity.Data;
import com.example.parent.bookmanage.entity.User;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;

/**
 * 图书管理控制器
 * 负责处理图书相关的HTTP请求，包括图书列表展示、图书搜索和图书借阅查询等功能
 */
@Controller
@RequestMapping("book") // 定义控制器的基础请求路径，所有方法的请求路径都以此为前缀
public class BookController {

    // 图书数据列表，从Data类中获取初始化数据
    // 实际应用中通常会从数据库获取，这里使用模拟数据
    ArrayList<Book> books = Data.getData();

    /**
     * 展示所有图书列表
     *
     * @param model   模型对象，用于向视图传递数据
     * @param session HTTP会话对象，用于存储用户会话信息
     * @return 视图名称"books"，表示跳转至图书列表页面
     */
    @RequestMapping("list") // 映射的请求路径，完整路径为/book/list
    public String findBook(Model model, HttpSession session) {
        // 在会话中存储当前用户信息，模拟用户登录状态
        // 实际应用中通常会从登录流程获取用户信息
        session.setAttribute("user", new User("zhangsan", "ADMIN"));

        // 将图书列表数据添加到模型中，供视图页面使用
        model.addAttribute("books", books);

        // 返回视图名称，由视图解析器解析为具体的页面
        return "books";
    }

    /**
     * 根据图书名称和作者搜索图书
     *
     * @param book    封装了搜索条件（名称和作者）的Book对象，由Spring MVC自动绑定请求参数
     * @param model   模型对象，用于向视图传递搜索结果数据
     * @param session HTTP会话对象，用于存储用户会话信息
     * @return 视图名称"books"，表示跳转至图书列表页面展示搜索结果
     */
    @RequestMapping("search") // 映射的请求路径，完整路径为/book/search
    public String searchBook(Book book, Model model, HttpSession session) {
        // 创建用于存储搜索结果的集合
        ArrayList<Book> bs = new ArrayList<>();

        // 从搜索条件对象中获取图书名称和作者
        String bname = book.getName();
        String bauthor = book.getAuthor();

        // 判断搜索条件：如果名称和作者都为空，则返回所有图书
        if (bname.isEmpty() && bauthor.isEmpty()) {
            bs = books;
        } else {
            // 遍历所有图书，筛选符合条件的图书
            // 条件：图书名称包含搜索名称 或 图书作者包含搜索作者
            for (Book b : books) {
                if ((!bname.isEmpty() && b.getName().contains(bname)) ||
                        (!bauthor.isEmpty() && b.getAuthor().contains(bauthor))) {
                    bs.add(b);
                }
            }
        }

        // 在会话中存储当前用户信息
        session.setAttribute("user", new User("zhangsan", "ADMIN"));

        // 将搜索结果添加到模型中，供视图页面使用
        model.addAttribute("books", bs);

        // 返回视图名称，展示搜索结果
        return "books";
    }

    /**
     * 根据图书ID查询图书（模拟借阅申请）
     *
     * @param id 图书ID，通过URL路径传递（@PathVariable注解获取）
     * @return 视图名称"books"，表示跳转至图书列表页面
     */
    @RequestMapping("find/{id}") // 映射的请求路径，完整路径为/book/find/{id}，其中{id}为动态参数
    public String findBookById(@PathVariable("id") Integer id) {
        // 打印申请借阅的图书ID，实际应用中会在这里处理借阅逻辑
        System.out.println("申请借阅图书的id：" + id);

        // 返回视图名称，跳转至图书列表页面
        return "books";
    }
}